package compile;

import java.io.*;

public class CommandUtil {
    /*
    * 1.通过Runtime类拿到runtime对象的实例并执行exec方法
    * 2.获取到标准输出 写入到对应的文件中
    * 3.获取到标准错误 写入到对应的文件中
    * 4.返回process的状态码
    * */
    public static int run(String cmd,String stdoutFile,String stderrFile){
        try {
            // 1.通过Runtime类拿到runtime对象的实例并执行exec方法
            Process process = Runtime.getRuntime().exec(cmd);
            // 2.获取到标准输出 写入到对应的文件中
            if(stdoutFile != null){
                InputStream stdoutFrom = process.getInputStream();
                FileOutputStream stdoutTo = new FileOutputStream(stdoutFile);
                while(true){
                    int ch = stdoutFrom.read();
                    if(ch == -1){
                        break;
                    }
                    stdoutTo.write(ch);
                }
                stdoutFrom.close();
                stdoutTo.close();
            }
            // 3.获取到标准错误 写入到对应的文件中
            if(stderrFile != null){
                InputStream stderrFrom = process.getErrorStream();
                FileOutputStream stderrTo = new FileOutputStream(stderrFile);
                while(true){
                    int ch = stderrFrom.read();
                    if(ch == -1){
                        break;
                    }
                    stderrTo.write(ch);
                }
                stderrTo.close();
                stderrFrom.close();
            }
            // 4.返回process的状态码
            int exitCode = process.waitFor();
            return exitCode;
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }
        return 1;
    }

    public static void main(String[] args) {
        int javac = CommandUtil.run("javac", "stdout.txt", "stderr.txt");
        System.out.println(javac);
    }
}

